package IO;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import models.Account;
import models.Bank;
import models.Person;
import models.SavingAccount;
import models.SpendingAccount;
public class AdminFrame extends GenericFrame {
public static int NR_ELEM_IN_TABLE;
private JPanel logOutOpPanel;
public JTextField jTextField;
public JButton searchFilterButton;
private JPanel searchPanelButton;
private JScrollPane jPanelContent;
public JTable tableAdmin;
private DefaultTableModel tableModel;
public JButton addAccountButton;
public JButton addHolderButton;
public JButton removeHolderButton;
public AdminFrame(Bank bank) {
super();
logInOutButton = new JButton("LOGOUT");
addAccountButton = new JButton("ADD ACCOUNT");
addHolderButton = new JButton("ADD HOLDER");
removeHolderButton = new JButton("REMOVE HOLDER");
logOutOpPanel = new JPanel(new GridLayout(1, 4));
logOutOpPanel.add(addAccountButton);
logOutOpPanel.add(addHolderButton);
logOutOpPanel.add(removeHolderButton);
logOutOpPanel.add(logInOutButton);
jTextField = new JTextField(30);
jTextField.setBounds(10, 30, 300, 300);
jTextField.setBackground(Color.white);
jTextField.setForeground(Color.black);
searchFilterButton = new JButton("Search");
searchPanelButton = new JPanel(new BorderLayout());
JLabel labelType = new JLabel("Filter(Person ID):");
searchPanelButton.add(labelType, BorderLayout.WEST);
searchPanelButton.add(jTextField, BorderLayout.CENTER);
searchPanelButton.add(searchFilterButton, BorderLayout.EAST);
tableModel = new DefaultTableModel();
tableModel.addColumn("HolderID");
tableModel.addColumn("Holder name");
tableModel.addColumn("AccountID");
tableModel.addColumn("Account type");
tableModel.addColumn("Available MONEY");
tableModel.addColumn("OP"); // removeAccount
// tableModel.addColumn("OP2");
tableAdmin = new JTable(tableModel);
this.updateTable(bank);
tableAdmin.setFillsViewportHeight(true);
jPanelContent = new JScrollPane(tableAdmin);
frame.setLayout(new BorderLayout());
frame.add(searchPanelButton, BorderLayout.NORTH);
frame.add(jPanelContent, BorderLayout.CENTER);
frame.add(logOutOpPanel, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public void updateTable(Bank bank) {
this.removeAllRows(); // preserve the order as in warehouse
try {
NR_ELEM_IN_TABLE = bank.bankMap.size();
} catch (NullPointerException ex) {
NR_ELEM_IN_TABLE = 0;
}
// if (NR_ELEM_IN_TABLE == 0) {
// JLabel noElemLabel = new JLabel("no product to be displayed");
// jPanelContent.add(noElemLabel);
// }
if (NR_ELEM_IN_TABLE > 0) {
Set<Person> holders = bank.getHolders();
Iterator<Person> iterator = holders.iterator();
while (iterator.hasNext()) {
Person auxP = iterator.next();
Set<Account> accounts = bank.getAccounts(auxP);
if(accounts.size() == 0){
tableModel.addRow(
new Object[] { auxP.ID, auxP.name, "-", "-", "-", "-" });
}
else{
Iterator<Account> iterator2 = accounts.iterator();
while (iterator2.hasNext()) {
Account auxA = iterator2.next();
tableModel.addRow(
new Object[] { auxP.ID, auxP.name, auxA.ID, auxA.type, auxA.money, "REMOVE Account" });
}
}
}
}
}
public void updateTable(Bank bank, String searchForID) {
if (!(searchForID.length() == 0)) { // not empty string
this.removeAllRows();
Set<Person> holders = bank.getHolders();
Iterator<Person> iterator = holders.iterator();
while (iterator.hasNext()) {
Person auxP = iterator.next();
if(auxP.ID.equals(searchForID)){
Set<Account> accounts = bank.getAccounts(auxP);
if(accounts.size() == 0){
tableModel.addRow(
new Object[] { auxP.ID, auxP.name, "-", "-", "-", "-" });
NR_ELEM_IN_TABLE ++;
}
else{
Iterator<Account> iterator2 = accounts.iterator();
while (iterator2.hasNext()) {
Account auxA = iterator2.next();
tableModel.addRow(
new Object[] { auxP.ID, auxP.name, auxA.ID, auxA.type, auxA.money, "REMOVE Account" });
NR_ELEM_IN_TABLE ++;
}
}
}//end-if (auxP.ID.equals(searchForID))
}
} // end-if there is a string
else{ //empty string
this.updateTable(bank);
}
}
private void removeAllRows() {
int n = tableModel.getRowCount();
for (int i = n - 1; i >= 0; i--) {
tableModel.removeRow(i);
}
NR_ELEM_IN_TABLE = 0;
}
// *** 1 ***// ADD holder
public Person queryAddCustomer(Bank bank) { // ID, name
JTextField xField = new JTextField(10); // id
JTextField yField = new JTextField(15); // name
JPanel myPanel = new JPanel(new GridLayout(2, 1));
myPanel.add(new JLabel("ID:"));
myPanel.add(xField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer
myPanel.add(new JLabel("NAME:"));
myPanel.add(yField);
int result = JOptionPane.showConfirmDialog(null, myPanel, "Customer details", JOptionPane.OK_CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
String id, name;
try {
id = xField.getText();
} catch (NumberFormatException ex) {
id = new Random().toString(); // invalid customer
}
try {
name = yField.getText();
} catch (NumberFormatException ex) {
name = new Random().toString(); // invalid customer
}
Set<Person> holders = bank.getHolders();
Iterator<Person> iterator = holders.iterator();
while (iterator.hasNext()) {
Person auxP = iterator.next();
if(auxP.ID.equals(id) && auxP.name.equals(name)){
System.out.println("already existent");
return null;
}
}
return new Person(id, name);
}
return null;
}
// *** 2 ***// ADD account
public boolean queryAddAccount(Bank bank) { // ID, name
JTextField xField = new JTextField(10); // P id
JTextField yField = new JTextField(15); // P name
JTextField zField = new JTextField(10); // A id
JTextField wField = new JTextField(15); // A type
JPanel myPanel = new JPanel(new GridLayout(2, 1));
myPanel.add(new JLabel("Holder ID:"));
myPanel.add(xField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer
myPanel.add(new JLabel("Holder NAME:"));
myPanel.add(yField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer
myPanel.add(new JLabel("New Account ID:"));
myPanel.add(zField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer
myPanel.add(new JLabel("New Account TYPE:"));
myPanel.add(wField);
int result = JOptionPane.showConfirmDialog(null, myPanel, "New ACCOUNT info", JOptionPane.OK_CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
String pid, pname, aid, atype;
try {
pid = xField.getText();
} catch (NumberFormatException ex) {
pid = new Random().toString(); // invalid customer
}
try {
pname = yField.getText();
} catch (NumberFormatException ex) {
pname = new Random().toString(); // invalid customer
}
try {
aid = zField.getText();
} catch (NumberFormatException ex) {
aid = new Random().toString(); // invalid customer
}
try {
atype = wField.getText();
} catch (NumberFormatException ex) {
atype = new Random().toString(); // invalid customer
}
Set<Person> holders = bank.getHolders();
Iterator<Person> iterator = holders.iterator();
while (iterator.hasNext()) {
Person auxP = iterator.next();
if(auxP.ID.equals(pid) && auxP.name.equals(pname)){
Set<Account> accounts = bank.getAccounts(auxP);
if(accounts.size() == 0){
if (atype.equals("SAVING")) {
bank.addAccount(auxP, new SavingAccount(aid, 0));
return true;
}
if (atype.equals("SPENDING")) {
bank.addAccount(auxP, new SpendingAccount(aid, 0));
return true;
}
}
else{
Iterator<Account> iterator2 = accounts.iterator();
while (iterator2.hasNext()) {
Account auxA = iterator2.next();
if(auxA.ID.equals(aid) && auxA.type.equals(atype))
{
System.out.println("already exists");
return false;
}
}
if (atype.equals("SAVING")) {
bank.addAccount(auxP, new SavingAccount(aid, 0));
return true;
}
if (atype.equals("SPENDING")) {
bank.addAccount(auxP, new SpendingAccount(aid, 0));
return true;
}
}
}
}
}
return false;
}
// *** 3 ***// REMOVE holder
public boolean queryRemoveCustomer(Bank bank) { // ID, name
JTextField xField = new JTextField(10); // id
JTextField yField = new JTextField(15); // name
JPanel myPanel = new JPanel(new GridLayout(2, 1));
myPanel.add(new JLabel("ID:"));
myPanel.add(xField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer
myPanel.add(new JLabel("NAME:"));
myPanel.add(yField);
int result = JOptionPane.showConfirmDialog(null, myPanel, "Customer details", JOptionPane.OK_CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
String id, name;
try {
id = xField.getText();
} catch (NumberFormatException ex) {
id = new Random().toString(); // invalid customer
}
try {
name = yField.getText();
} catch (NumberFormatException ex) {
name = new Random().toString(); // invalid customer
}
Set<Person> holders = bank.getHolders();
Iterator<Person> iterator = holders.iterator();
while (iterator.hasNext()) {
Person auxP = iterator.next();
if(auxP.ID.equals(id) && auxP.name.equals(name)){
bank.removeHolder(auxP);
return true;
}
}
System.out.println("not existing");
return false;
}
return false;
}
}